package main

import "fmt"

/*
*
map 是一种内置的引用类型，用于存储键值对（key-value）
类似于 Python 的 dict，Java 的 HashMap
key 是唯一的，value 可以重复
key 必须是可比较的类型，比如：int、string、bool
*/
func main() {
	m := make(map[string]int)
	m["one"] = 1
	m["two"] = 2
	m["three"] = 3
	m["four"] = 4
	m["five"] = 5
	m["six"] = 6
	m["seven"] = 7
	m["eight"] = 8
	m["nine"] = 9
	m["ten"] = 10
	fmt.Println(m)

	source := map[string]int{
		"alen":   80,
		"Nexora": 100,
		"alice":  13,
		"John":   93,
		"Chirs":  80,
	}
	fmt.Println(source)
	fmt.Println("=========MapOfOpe========")
	MapOfOpe()
}

func MapOfOpe() {
	m := make(map[string]int)
	m["one"] = 1
	m["two"] = 2
	m["three"] = 3
	m["alen"] = 8
	// 添加或修改
	m["four"] = 4
	fmt.Println(m) // 他不保证顺序
	m["alen"] = 89
	fmt.Println(m) // 他不保证顺序

	source := map[string]int{
		"alen":   80,
		"Nexora": 100,
		"alice":  13,
		"John":   93,
		"Chirs":  80,
	}
	// 获取元素
	s := source["Nexora"]
	fmt.Printf("The %s score is %d\n", "Nexora", s)
	// 判断元素是否存在
	v, ok := source["John"]
	if ok {
		fmt.Println("John'source is", v)
	} else {
		fmt.Println("John is not exist")
	}

	// 遍历map
	for k, v := range source {
		fmt.Printf("The %s score is %d\n", k, v)
	}

	// 遍历打印
	total := 0
	for name, score := range source {
		fmt.Printf("%s 的成绩是 %d\n", name, score)
		total += score
	}

	avg := float64(total) / float64(len(source))
	fmt.Printf("平均成绩是 %.2f\n", avg)

	// 查询是否存在某个学生
	if s, ok := source["Lily"]; ok {
		fmt.Println("Lily 的分数是", s)
	} else {
		fmt.Println("Lily 不在名单中")
	}
}
